প্রিপ্রসেসর ডিরেক্টিভস (Preprocessor Directives) হলো এমন কিছু নির্দেশনা, যা C++ কম্পাইলারকে কোড কম্পাইল করার আগে প্রিপ্রসেসিং করতে বলে। প্রিপ্রসেসর ডিরেক্টিভস #
চিহ্ন দিয়ে শুরু হয় এবং এটি বিভিন্ন কাজ করে, যেমন ফাইল ইনক্লুড করা, ম্যাক্রো ডিফাইন করা, শর্তসাপেক্ষ কম্পাইলিং ইত্যাদি। কিছু সাধারণ প্রিপ্রসেসর ডিরেক্টিভস হলো #include
, #define
, এবং #ifdef
।
#include
ডিরেক্টিভ ব্যবহার করে বাইরের লাইব্রেরি বা হেডার ফাইলকে প্রোগ্রামে যুক্ত করা হয়। এতে C++ এর বিল্ট-ইন লাইব্রেরি বা ইউজার-ডিফাইন্ড হেডার ফাইল অন্তর্ভুক্ত করা যায়।
#include
এর ধরন:Standard Library Files: < >
চিহ্নের মধ্যে ফাইল নাম উল্লেখ করে।
#include <iostream> // স্ট্যান্ডার্ড লাইব্রেরি অন্তর্ভুক্ত
User-Defined Files: " "
চিহ্নের মধ্যে ফাইল নাম উল্লেখ করে।
#include "myheader.h" // ইউজার-ডিফাইন্ড হেডার ফাইল অন্তর্ভুক্ত
#include <iostream> // iostream লাইব্রেরি ইনক্লুড করা
using namespace std;
int main() {
cout << "Hello, World!" << endl;
return 0;
}
বর্ণনা:
#include <iostream>
দিয়ে iostream
লাইব্রেরি ইনক্লুড করা হয়েছে, যাতে ইনপুট-আউটপুট অপারেশন চালানো যায়।#define
ডিরেক্টিভ ব্যবহার করে ম্যাক্রো বা কনস্ট্যান্ট ডিফাইন করা হয়। এটি একটি নির্দিষ্ট নামের সাথে মান যুক্ত করে এবং প্রোগ্রামে সেই নাম ব্যবহার করলে সেটি #define
এর মান দ্বারা প্রতিস্থাপিত হয়।
#include <iostream>
#define PI 3.14159 // কনস্ট্যান্ট ডিফাইন করা
using namespace std;
int main() {
float radius = 5.0;
float area = PI * radius * radius; // PI এর মান ব্যবহার
cout << "Area of the circle: " << area << endl;
return 0;
}
বর্ণনা:
PI
নামে একটি কনস্ট্যান্ট ডিফাইন করা হয়েছে, যার মান 3.14159
।PI
ব্যবহার করলে তা 3.14159
দ্বারা প্রতিস্থাপিত হয়।#define
ডিরেক্টিভ দিয়ে ম্যাক্রো ফাংশনও তৈরি করা যায়, যা কোডকে আরও সংক্ষিপ্ত করে।
#include <iostream>
#define SQUARE(x) ((x) * (x)) // ম্যাক্রো ফাংশন ডিফাইন করা
using namespace std;
int main() {
int num = 5;
cout << "Square of " << num << " is: " << SQUARE(num) << endl;
return 0;
}
বর্ণনা:
SQUARE(x)
নামে একটি ম্যাক্রো ফাংশন ডিফাইন করা হয়েছে, যা একটি সংখ্যার স্কয়ার নির্ণয় করে।SQUARE(num)
ব্যবহার করলে ((num) * (num))
হিসাবে প্রতিস্থাপিত হয়।#ifdef
(if defined) ডিরেক্টিভটি শর্তসাপেক্ষ কম্পাইলিংয়ের জন্য ব্যবহৃত হয়। এটি চেক করে যে নির্দিষ্ট ম্যাক্রো বা কনস্ট্যান্ট ডিফাইন করা আছে কিনা। যদি ডিফাইন করা থাকে, তাহলে সেই অংশের কোড কম্পাইল হবে, অন্যথায় সেটি এড়িয়ে যাবে।
#include <iostream>
#define DEBUG // DEBUG ম্যাক্রো ডিফাইন করা
using namespace std;
int main() {
int x = 10, y = 20;
#ifdef DEBUG
cout << "Debugging mode: x = " << x << ", y = " << y << endl;
#endif
cout << "Sum: " << x + y << endl;
return 0;
}
বর্ণনা:
DEBUG
ম্যাক্রো ডিফাইন করা হয়েছে।#ifdef DEBUG
ডিরেক্টিভ চেক করছে যে DEBUG
ম্যাক্রো ডিফাইন করা আছে কিনা। যদি থাকে, তাহলে ডিবাগিং মেসেজ প্রিন্ট হবে।#define DEBUG
লাইনটি বাদ দেওয়া হয়, তবে #ifdef DEBUG
এর অন্তর্ভুক্ত কোড অংশটি কম্পাইল হবে না।আউটপুট:
Debugging mode: x = 10, y = 20
Sum: 30
#ifndef
(if not defined) ডিরেক্টিভ #ifdef
এর বিপরীত কাজ করে। এটি তখন কার্যকর হয় যখন নির্দিষ্ট ম্যাক্রো বা কনস্ট্যান্ট ডিফাইন করা না থাকে।
#include <iostream>
#ifndef PI
#define PI 3.14159 // PI ডিফাইন না থাকলে এটি ডিফাইন হবে
#endif
using namespace std;
int main() {
cout << "Value of PI: " << PI << endl;
return 0;
}
বর্ণনা:
PI
ডিফাইন করা আছে কিনা চেক করা হচ্ছে। যদি ডিফাইন করা না থাকে, তবে এটি 3.14159
দিয়ে ডিফাইন করা হবে।আউটপুট:
Value of PI: 3.14159
ডিরেক্টিভ | কাজ |
---|---|
#include | বাইরের লাইব্রেরি বা ফাইল প্রোগ্রামে ইনক্লুড করা |
#define | কনস্ট্যান্ট বা ম্যাক্রো ডিফাইন করা |
#ifdef | নির্দিষ্ট ম্যাক্রো ডিফাইন করা আছে কিনা চেক করা |
#ifndef | নির্দিষ্ট ম্যাক্রো ডিফাইন করা নেই কিনা চেক করা |
#ifndef
, #define
, এবং #endif
ব্যবহার করে হেডার ফাইল একাধিকবার ইনক্লুড হওয়া প্রতিরোধ করা যায়।C++ এ প্রিপ্রসেসর ডিরেক্টিভস ব্যবহার করে কোডকে আরও কার্যকরী, সংগঠিত, এবং পুনরায় ব্যবহারযোগ্য করা যায়।
common.read_more